Recently, robots have been used for not only the industrial field but also the public consumer field. Therefore, it has become important to ensure the safety. However, according to a stoppage means for stopping a robot arm by detecting an external force, which is given to the robot at the time of collision, with a force sensor, the manufacturing cost and the weight are undesirably increased. Accordingly, it is desired to enhance the performance of compliance servo control including the collision detection, in which no sensors are used, and the control of stopping motion.
Concerning the method of realizing compliance servo control without using sensors, it is common to adopt a method in which even when a positional deviation is increased in the positional feed back control, an excessively high torque is not generated in a motor by suppressing the increase in the electric current command with respect to an increase in the positional deviation.
According to a quantity of suppression of the electric current command in the feedback control, an intensity of torque generated by the motor is also suppressed, so that the compliance can be enhanced.
A means for suppressing the electric current command in feedback control is disclosed in JP-A-09-179632 (U.S. Pat. No. 5,994,864) in which the electric current command is limited. A means for suppressing the electric current command in feedback control is also disclosed in JP-A-08-155868 in which the feedback gain is decreased.
As described above, in order to enhance the compliance of a robot arm, it is important to suppress the electric current command in feedback control. Unless the electric current is suppressed in feedback control, the compliance of a robot arm becomes close to the common servo rigidity. Therefore, the compliance of servo control is lowered.
However, in order to operate a robot arm, it is necessary to generate a drive torque by a motor in which consideration is given to the inertia torque, the friction torque and the gravity torque. Therefore, when the robot arm is operated only by feedback control, it is difficult to suppress an electric current command of the motor.
FIG. 3 is a block diagram showing a conventional method of controlling the friction compensation in which the actual velocity is used. In the drawing, reference numeral 1 is a motor rotary angle command θcom, reference numeral 2 is a feedback controller, reference numeral 3 is an electric current restricting means, reference numeral 4 is a feedback control electric current command Icom, reference numeral 5 is a motor current Im, reference numeral 6 is a range representing (motor+actual load), reference numeral 7 is a motor torque constant Kt, reference numeral 8 is a motor generation torque τmm, reference numeral 9 is an external force τμ+τdyn+τdis given to a motor, reference numeral 10 is a transfer function of motor inertia, reference numeral 11 is a motor rotation angle θfb, reference numeral 12 is a differential operator, reference numeral 13 is a motor angular velocity command ωcom, reference numeral 14 is a differential operator, reference numeral 15 is a motor angular acceleration command αcom, reference numeral 16 is a motor inertia (rotor+reduction gear primary side) J, reference numeral 17 is a motor electric current Iml necessary for the operation of a robot, reference numeral 18 is an inverse number 1/Kt of the motor torque constant, reference numeral 19 is a calculated value of dynamic torque τdyn, reference numeral 20 is a calculated value of friction τμ, reference numeral 21 is a friction calculation block, reference numeral 22 is a dynamic calculation block, reference numeral 23 is a motor angular velocity ωfb, reference numeral 24 is a differential operator, and reference numeral 25 is a rotary angle of the other axis.
The motor generation torque τm, which is generated at the time of operation of the robot, is expressed by the expression (1) when it is seen from the motor drive side. The motor generation torque cm is expressed by the expression (2) when it is seen from the load side.τmm=Kt*Im  (1)τml=J*α+τμ+τdyn+τdis  (2)In this case, reference marks used in the expressions (1) and (2) are defined as follows.
Kt: Motor torque constant
Im: Motor electric current
α: Motor angular acceleration
ω: Motor angular velocity
J: Motor inertia (rotor+primary side of reduction gear)
τμ: Friction torque (converted into motor shaft end)
τdyn: Dynamic torque (Dynamic torque is a sum of gravity torque, inertia force, Coriolis force and elastic force, which is converted into a motor shaft end.)
τdis: Disturbance torque (Disturbance torque is a contact torque given from the outside or a parameter error. Disturbance torque is converted into a motor shaft end.)
When the disturbance torque τdis=0 in the expression (2), it is possible to calculate the motor electric current Iml, which is necessary for the operation of the robot arm, by the expressions (1) and (2).Iml=J*α+τμ+τdyn)/Kt  (3)
As shown in FIG. 3, when Iml calculated by this expression (3) is added to the feedback electric current command Icom, if the disturbance torque τdis=0, even when the feedback electric current is 0, it becomes possible for the robot arm to follow to a target position.
In FIG. 3, the feedback electric current command Icom (4) can be found when the PID calculation is conducted by the feedback controller (2) from the rotary angle command θcom (1) and the actual motor rotary angle θfb and the electric restriction (3) is made. Concerning the means for restricting the electric current (3), there are provided a system in which the limit is set and a system in which the feedback gain is lowered.
On the other hand, Iml (17) calculated by the expression (3) can be obtained as follows. The angular acceleration θcom (15), which is obtained when the motor rotation command θcom (1) is subjected to the differential calculation (12) and (14) twice, is multiplied by the motor inertia J (16). The friction torque τμ (20) and the dynamic torque τdyn (19) are added to the thus obtained value. The obtained value is multiplied by the inverse number 1/Kt (18) of the motor torque constant, and Iml (17) calculated by the expression (3) can be obtained.
That is, when the motor electric current Iml necessary for the operation of a robot can be accurately calculated by the expression (3), it becomes possible to suppress an electric current command in feedback control. Therefore, the compliance of the robot can be enhanced.
However, actually, an error of calculation is caused by the parameter error of the expression (3). Therefore, when the electric current is intensely suppressed in feedback control, it becomes impossible to compensate the error, and the robot arm becomes out of control and the positional deviation can not be decreased, that is, there is a possibility that the robot arm runs away.
When the electric current command is made to be 0 in the feedback control, if the positional deviation is extended by the contact torque given from the outside, a force to return the robot arm to the initial position is not generated.
As explained above, how much the electric current command by feedback control can be suppressed depends on the calculation accuracy of the expression (3).
The friction torque τμ, which is one of the primary items of the motor electric current Iml calculated by the expression (3) and necessary for the operation of the robot, includes: the stationary friction torque τμs and the dynamic friction torque τμm which are determined by the acting direction of a force; and the viscous friction torque τμd (coefficient D of viscosity) which is proportional to the velocity.τμ=τμs+τμm+τμd  (4)
However, in the expression (4), each item is calculated as follows.
                              τ          ⁢                                          ⁢          μ          ⁢                                          ⁢          s                =                  τ          ⁢                                          ⁢          μ          ⁢                                          ⁢          s0          *                      sgn1            ⁡                          (              ω              )                                                          (        5        )                                          sgn1          ⁡                      (            ω            )                          =                  {                                                    1                                                              (                                                            ω                      =                      0                                        ,                                                                  moving                        ⁢                                                                                                  ⁢                        direction                                            >                      0                                                        )                                                                                    0                                                              (                                      ω                    ≠                    0                                    )                                                                                                      -                  1                                                                              (                                                            ω                      =                      0                                        ,                                                                  moving                        ⁢                                                                                                  ⁢                        direction                                            <                      0                                                        )                                                                                                                                  τ          ⁢                                          ⁢          μ          ⁢                                          ⁢          m                =                  τ          ⁢                                          ⁢          μ          ⁢                                          ⁢          m0          *                      sgn2            ⁡                          (              ω              )                                                          (        6        )                                          sgn2          ⁡                      (            ω            )                          =                  {                                                                      -                  1                                                                              (                                      ω                    <                    0                                    )                                                                                    0                                                              (                                      ω                    =                    0                                    )                                                                                    1                                                              (                                      ω                    >                    0                                                                                                                                                    τ          ⁢                                          ⁢          μ          ⁢                                          ⁢          d                =                  D          *          ω                                    (        7        )            
As can be seen from the expressions (5) to (7), all friction torque is calculated depending upon the angular velocity ω.
Concerning the angular velocity ω used for the calculation of the friction torque, the angular velocity ωFB, which is subjected to feedback control, is used in the above conventional example (JP-A-9-179632). In another conventional example (JP-A-10-180663), the angular velocity command ωcom, which is obtained when the positional command θcom is differentiated, is used.
However, in the compliance control of the robot, there are provided two cases. One is a case in which the robot acts actively according to the positional command θcom. The other is a case in which the robot acts passively being pushed by an external force.
As shown in FIG. 3, when the actual angular velocity ωfb (23), which is obtained when the actual motor rotation angle θfb (11) is differentiated (24), is used as the angular velocity which is used when the friction torque τμ (20) is calculated by the expression (5) with the calculation block (21), a velocity fluctuation caused by the external force τdis, which is a portion of the disturbance torque (9) given to the motor, is reflected, so that the calculation accuracy of the friction torque τμ (20) can be enhanced.
However, when the robot is actively operated from a state in which the robot is completely stopped, the operating direction is unknown until the robot starts operating.
Therefore, it is impossible to calculate the stationary friction torque τμs.
Until the robot starts operating, the actual angular velocity ωFB is 0, and the dynamic friction torque τμm and the viscous friction torque τμd calculated by the expressions (6) and (7) are, of course, 0. Therefore, the friction torque τμ calculated by the expression (4) is 0, and no motor torque for operating the robot is generated at all.
In this state, when the torque caused by the electric current command Icom (4) of feedback control is suppressed to enhance the compliance and becomes lower than the actual stationary friction torque τμs, the robot is not moved even when the rotation angle command θcom (1) is generated.
On the other hand, as shown in FIG. 4, when the angular velocity command ωcom (13), which is obtained when the motor rotation angle command θcom (1) is differentiated, is used for the angular velocity ω which is used for the calculation (21) of the frictional torque τμ (20), these problems are solved. That is, even when the robot is not operated, when the friction torque τμ (20) is calculated (21) by the expression (4) with the angular velocity command ωcom (13) and added to the feedback electric current command Icom (4), the actual friction torque can be compensated. Even when the electric current command Icom (4) by feedback control is suppressed, the robot can be operated.
However, when the angular velocity command ωcom (13) is used for the angular velocity ω which is used for the calculation (21) of the frictional torque τμ (20), the robot can be actively operated according to the angular velocity command ωcom (13). However, in the case where an angular velocity fluctuation is caused by the disturbance torque τdis in the middle of the operation, a big error is caused between the angular velocity command ωcom (13) and the actual angular velocity ωfb (reference numeral 23 in FIG. 3). Accordingly, an error of calculation of the viscous friction torque τμd, which is calculated by the expression (7) is increased.
When the robot is pushed by an external force at the time of stoppage of the robot when the angular velocity command ωcom (13) is 0, and the robot is stopped, the frictional torque τμ calculated by the expression (4) is 0 at all times. Therefore, the actual friction torque can not be compensated at all.
Further, even when the robot is not pushed by an external force, a delay of follow is caused in the feedback control conducted by the feedback controller in the actual operation. Therefore, at the time of stoppage of the robot, before the actual angular velocity ωfb (reference numeral 23 in FIG. 3) becomes 0, the angular velocity command ωcom (13) becomes 0. Therefore, the frictional torque τ calculated by the expression (4) at this time also becomes 0, and no frictional compensation is made. That is, at the point of time when the angular velocity command ωcom (13) reaches 0, the robot is suddenly stopped and can not reach an objective position and further there is a possibility that vibration is caused.
In this case, in the case where the torque generated by the motor according to the electric current command Icom (4) of the feedback control is suppressed to be lower than the actual frictional torque, even when a positional deviation is increased by an external force, the robot is not operated, and it is impossible to reduce the positional deviation.
In other words, although the frictional compensation is being conducted, it is impossible to set the feedback electric current command to be lower than the actual frictional torque. Therefore, the robot compliance can not be enhanced.
As explained above, in the case where the frictional torque τμ is calculated by the expression (4), according to the method in which one of the actual angular velocity ωfb and the angular velocity command ωcom is used as the angular velocity, even when the electric current Iml, which is calculated by the expression (3) with the calculated frictional torque τμ, is added to the feedback control electric current, the actual frictional torque can not be compensated.
As shown in FIG. 3, when the frictional torque τμ is compensated by 100% by using the actual angular velocity ωfb (23) for the angular velocity which is used at the time of calculating (21) the frictional torque τμ (20) with the expression (5), the feedback characteristic of the control system can be subjected to frictional compensation. Therefore, the control system is operated as if there were no friction. Accordingly, although the compliance can be enhanced, the feedback system becomes vibrational.
On the other hand, as shown in FIG. 4, in the case where the angular velocity command ωcom (13) is used for the angular velocity ω which is used for calculating (21) the frictional torque τμ (20), the feedback characteristic of the control system is not affected. Therefore, in order to improve the target following characteristic, it is desirable that the compensation is made by 100%.
Next, the second conventional example will be explained below.
Concerning the method of finding a collision torque without using a sensor, the following method is commonly used. The motor generation torque is found when a loss of torque, which is generated in the motor and the reduction gear, is subtracted from the torque generated by the drive electric current of the motor. When the torque necessary for the output of the reduction gear, which is found by the dynamic calculation and referred to as a dynamic torque, is subtracted from the motor generation torque found before, the collision torque is found.
For example, the frictional torque corresponding to the loss of the torque generated by the motor is defined as a sum of the proportional item to the velocity (viscous friction torque) and the stationary item (Coulomb's frictional torque), and calculated. This is disclosed, for example, in JP-A-2002-283276.
According to JP-A-6-083403 (U.S. Pat. No. 6,298,283), the following technique is proposed. When the fluctuation of a parameter of the robot is calculated by the estimated algorithm and added to the torque (electric current) command, the fluctuation factor is canceled. In this conventional example, the frictional torque corresponding to a loss caused in the torque generated by the motor is defined as a sum of the proportional item to the velocity and the stationary item, and estimated by the estimation algorithm.
Accordingly, in the case where the collision torque is found without using a sensor when the dynamic torque of the robot is subtracted from the motor generation torque or in the case where the servo following characteristic by the feedforward control of dynamic torque is improved in order to exhibit the motor drive force at the maximum, it is required to accurately calculate the necessary torque by the motor generation torque and the reduction gear output of the robot.
The motor generation torque τm at the time of operation of the robot can be expressed by the expression (8) when it is viewed from the motor drive side. Further, the motor generation torque τm at the time of operation of the robot can be expressed by the expression (9) when it is viewed from the load side.τmm=Kt*Im−(J*α+D*ω+τμsgn(ω))  (8)τml=τdyn+τdis  (9)
In this connection, reference marks shown in the expressions (1) and (2) are defined as follows.
Kt: Motor torque constant
Im: Motor electric current
α: Motor angular acceleration
ω: Motor angular velocity
J: Motor inertia (rotor+primary side of reduction gear)
D: Viscous friction coefficient (converted into motor shaft end)
τμ: Frictional torque (converted into motor shaft end)
τg: Gravity torque (converted into motor shaft end)
τdyn: Dynamic torque (Dynamic torque is a sum of gravity torque, inertia force, Coriolis force and elastic force, which is converted into a motor shaft end.)
τdis: Disturbance torque (Disturbance torque is a collision torque or a parameter error. Disturbance torque is converted into a motor shaft end.)
      sgn    ⁡          (      ω      )        =      {                            1                                      (                          ω              >              0                        )                                                0                                      (                          ω              ≠              0                        )                                                            -            1                                                (                          ω              <              0                        )                              
Since the motor and the robot arm are connected to each other through the reduction gear, the items in the expression (9) except for the item of the motor inertia J must be converted into the motor shaft end with a reduction ratio.
When it is assumed that τmm=ml in (8) and (9), the collision torque τdis can be found by the following deformed the expression (10).τdis=Kt*Im−(J*α+D*ω+τμ*sgn(ω)+τdyn)  (10)
In the conventional example, the dynamic friction item τμ in the expression (10) is calculated as a fixed value. However, when the dynamic friction torque item is calculated as a fixed value, in the case where the motor generation torque is high at the time of acceleration and deceleration, a big calculation error of about 10% of the motor generation torque is caused.
On the other hand, feedforward control, the object of which is to improve the servo control characteristic, can be realized as follows. The motor electric current Im is found by the expression (10) under the condition that the disturbance torque τids=0, that is, under the condition that the robot is not contacted with the outside and no parameter errors are caused. The thus found electric current is represented by Iff. When Iff is added to the electric current command, the feedforward control can be realized.Iff (J*α+D*ω+τμ*sgn(ω)+τdyn)/Kt  (11)
In the conventional example, the calculation of the expression (11) is not used but the dynamic frictional item τμ is estimated by the estimation algorithm. However, it is not a change with age but the frictional torque is greatly changed in a short period of time of acceleration and deceleration. Accordingly, by the estimation of the estimation algorithm, a delay of the phase is generated and it is impossible to completely conduct the compensation.
When the calculation is previously conducted not by the estimation algorithm but by the dynamic torque, the delay of the phase is not caused. However, when the calculation is conducted with the expression (11) while the dynamic frictional torque is set at a fixed value, in the case where the motor generation torque is high at the time of acceleration and deceleration, a big calculation error of about 10% of the motor generation torque is caused.
This error will be explained as follows.
FIG. 11 is a view showing the motor generation torque τmm (1), τml (2) and the velocity (3) which are calculated by the expressions (8) and (9) when the robot is made to conduct a reciprocating motion shown in FIG. 12.
In this case, the robot arm to be used is a six axes vertical type multiple joint robot, the portable mass of which is 6 kg and the total arm length of which is approximately 1.3 m. In FIG. 12, the three wrist axes are omitted and the three fundamental axes are shown. At the time of making a measurement, axis FA, which is the third axis, is operated.
In this case, the measurement is made under the condition that the disturbance torque τdis=0, that is, under the condition that the robot is not contacted with the outside and no parameter errors are caused.
As shown in FIG. 11, in τmm (1) and τml (2), the error (4) of about 4% of the peak torque is generated, that is, it can be understood that the expression (8) has an error factor.
When a comparison is made at the time of both the acceleration and the deceleration, the result is as follows.τmm>τml
In the acceleration and deceleration in the operating section, the angular acceleration and the angular deceleration are the same although the directions are reverse to each other. With respect to the gravity, the robot arm is operated by a symmetrical pattern.
Accordingly, in order to reduce the error by decreasing τdyn, the dynamic frictional torque τμ must be increased. However, when dynamic frictional torque τμ is increased while it is kept as a constant value, as shown in FIG. 13, although the error (4) at the time of peak torque is decreased, however, the error (5) at the time of a constant velocity is increased.
That is, when the dynamic frictional torque τμ is considered to a constant, the error factor caused by τμ can not be eliminated. Therefore, in the expressions (10) and (11) containing τμ, the same error is generated.
Therefore, in the sensorless collision torque detection, when the dynamic frictional torque τμ is considered to a constant, although the robot arm does not collide with an object at the time of acceleration or deceleration, the expression (11) outputs an electric current corresponding to the error as a collision torque. For the above reasons, in order to prevent the occurrence of an erroneous detection, the collision detecting sensitivity must be lowered.
On the other hand, in the case of feedforward control of torque necessary for the reduction gear output, when the dynamic frictional torque τμ is considered to a constant, the calculation error is increased, and there is a possibility that the feedforward compensation torque becomes insufficient. When the estimation algorithm is used so as to prevent the generation of the calculation error, it is difficult to estimate the frictional torque, which is suddenly changed at the time of acceleration or deceleration, without causing a delay of the phase. Accordingly, there is a possibility that the deterioration of the control performance can not be sufficiently prevented.
Next, explanations will be made into a method of stopping the robot arm after the collision detection. There are proposed a method in which the robot arm is returned to the position where the collision is detected (JP-A-2002-117618 (U.S. Pat. No. 6,429,617)), a method in which the velocity command is forcibly set at 0 so as to stop the robot arm (JP-A-2000-52286) and a method in which the robot arm is stopped by the maximum reverse motor torque which is reverse to the rotating direction of the motor (Japanese Patent No. 3212571 (U.S. Pat. No. 6,298,283)) and (Japanese Patent No. 2871993 (U.S. Pat. No. 5,418,440)).
According to the methods in which the robot arm is returned to the collision detecting position, the robot arm is returned to the initial position by the positional control. Therefore, the stopping time depends upon the responding property of the positional control. In general, the responding property of the positional control is several tens Hz at the highest. Therefore, the responding property is not so high at the time of stopping the collision, and the stopping time is extended and it is impossible to prevent the occurrence of damage caused by the collision.
According to the method in which the robot arm is stopped by forcibly setting the velocity command at 0, the stopping time depends upon the responding property of the velocity control. In this case, the responding property is several hundreds Hz, which is higher than the responding property in the case of the positional control. However, it is inferior to the responding property (several kHz) of the electric current control.
According to this method, since the positional control servo rigidity by the integration of the velocity control is high, the robot arm is stopped while the distortion caused by the collision is remaining. Therefore, according to JP-A-2000-052286, the positional control rigidity is softened when the velocity integration gain is made to be 0, so that the problem of the distortion, which is caused by the collision, can be solved. However, in order to enhance the compliance, it is necessary to reduce a gain proportional to the velocity, which deteriorates the velocity responding property and extends the stopping time. It is difficult to make the stopping time and the compliance compatible with each other.
According to the method in which the robot arm is stopped by the maximum reverse motor torque with respect to the rotating direction of the motor, the responding property of the electric current control for generating the reverse torque is so high that the responding property can be several kHz, that is, the responding property is excellent. However, according to the method disclosed in Japanese Patent No. 3212571, it is necessary to previously set the time at which the reverse torque is impressed. When this impressing time is short, it is impossible to sufficiently reduce the velocity, and the damage caused by the collision is increased. When this impressing time is long, a redundant motion is conducted in the reverse direction, and there is a possibility that the robot arm causes the collision again. According to the method disclosed in Japanese Patent No. 2871993, a method is proposed in which the maximum reverse torque is impressed until the motor is stopped. In this method, it is unnecessary to previously determine the impressing time to impress the reverse torque. Therefore, the aforementioned problems are solved. However, only when the motor is stopped, the problem of the distortion caused by the collision can not be solved. Since the generation of the maximum reverse torque itself is a state in which the control is generating the maximum output in an open loop, in the case where the velocity is so low that the robot can not be damaged even when it collides with an object, there is a higher risk of impressing the reverse torque.
In either system, in the axis, the colliding direction of which coincides with the rotating direction of the motor, when the robot arm is returned to the collision detecting position or suddenly stopped, an intensity of the collision force is increased.
FIG. 15 is a view showing this state in which two-axes robot is used for the explanation. In general, the common vertical type multiple joint robot is composed of 6 axes. However, in order to simplify the explanations, 2-axes model will be explained below.
In FIG. 15(a), axis UA (41) is operated in the direction of the angular velocity ωfb (1), and axis FA (42) is operated in the direction of the angular velocity ωfb′ (6). When the time passes and each arm operates in the direction shown in FIG. 15(b) and collides with an obstacle (43), the collision force (44) is generated, and axis UA (41) is given a force reverse to the rotating direction of the motor, that is, axis UA (41) is given a collision torque τdis (9) in the direction so that the velocity can be reduced. On the other hand, axis FA (42) is given a force in the same direction as the rotating direction of the motor, that is, axis FA (42) is given a collision torque τdis′ (10) in a direction so that the velocity can be increased.
After that, in order to return axis FA (42) to the collision detecting position or suddenly stop axis FA (42), it is necessary to generate torque by the motor so that the motor rotation can be reduced. However, this torque is directed reverse to the direction of the collision torque τdis′ (10). Therefore, an intensity of the collision torque is increased on the contrary.
According to the method of returning the robot arm to the collision detecting position, although the axis (axis UA in FIG. 15), the motor rotating direction of which is reverse to the colliding direction, is returned to the collision detecting position, the axis (axis FA in FIG. 15), the motor rotating direction of which is the same as that of the colliding direction, is not reversed and continues the operation which has been conducted until the collision. In this way, the aforementioned problems are solved.
However, in the case where the collision is detected without using a sensor, the collision torque is estimated from the pieces of information of the mechanical parameter, position, velocity, acceleration and electric current of the robot. Therefore, compared with the case in which the collision detecting sensor is provided, the detection error is increased. For the above reasons, in the case of an axis, the collision detecting torque of which is low, there is a possibility that the direction is mistakenly detected and the appropriate stopping means can not be selected.
In the case of an axis, the detected collision torque value of which is low, it is safer that the colliding detection is not detected and the motor rotating speed is reduced so as to decrease the kinetic energy. However, since the colliding direction is unknown, it is better not to reduce the motor rotating speed in some cases, that is, different from the method described in Japanese Patent No. 2871993, the reverse torque should not be impressed until the motor is stopped. In the case where the motor rotating speed is so low that the robot can not be damaged even when it collides with an obstacle, the reverse torque should not be impressed.
Further, in the case of a vertical type multiple joint robot, it is impossible to neglect an interference force given between the axes. Accordingly, there is a possibility that a velocity reducing force is given to an axis, the velocity of which should not be reduced, by an interference force given from an axis to which the reverse torque is impressed. In any case, the reverse torque should be impressed upon a necessary axis for a minimum period of time.